﻿using FastFood.Business.Entities.Tipos;
using System;

namespace FastFood.Business.Entities
{
    public class DetalleVendibles
    {
        public short vendibleID { get; set; }
        public string nombre { get; set; }
        public decimal precioBruto { get; set; }
        public decimal IGV { get; set; }
        public decimal servicios { get; set; }
        public decimal precioNeto 
        {
            get { return precioBruto + IGV + servicios; }
        }
        public byte cantidad { get; set; }
        public TipoVendible tipo { get; set; }
        public decimal subTotal
        {
            get { return this.cantidad * this.precioNeto; }
        }

        public DetallesVentasInsumos ConvertToDetalleInsumos()
        {
            if (tipo == TipoVendible.Insumo)
            {
                return new DetallesVentasInsumos()
                {                    
                    insumoID = vendibleID,
                    cantidad = cantidad,
                    precioUnitario = precioBruto
                };
            }
            return null;
        }

        public DetallesVentasProductos ConvertToDetalleProductos()
        {
            if (tipo == TipoVendible.Producto)
            {
                return new DetallesVentasProductos()
                {
                    productoID = vendibleID,
                    cantidad = cantidad,
                    precioUnitario = precioBruto
                };
            }
            return null;
        }

        public DetallesVentasCombos ConvertToDetalleCombos()
        {
            if (tipo == TipoVendible.Combo)
            {
                return new DetallesVentasCombos()
                {
                    comboID = vendibleID,
                    cantidad = cantidad,
                    precioUnitario = precioBruto
                };
            }
            return null;
        }

        public void ConvertFromDetalleInsumos(DetallesVentasInsumos detalle, double _IGV, double _servicios)
        {
            this.vendibleID = detalle.insumoID;
            this.nombre = detalle.Insumos.nombre;
            this.cantidad = detalle.cantidad;
            this.precioBruto = detalle.precioUnitario;
            this.tipo = TipoVendible.Insumo;
            this.IGV = this.precioBruto * Convert.ToDecimal(_IGV);
            this.servicios = this.precioBruto * Convert.ToDecimal(_servicios);
        }

        public void ConvertFromDetalleProductos(DetallesVentasProductos detalle, double _IGV, double _servicios)
        {
            vendibleID = detalle.productoID;
            nombre = detalle.Productos.nombre;
            cantidad = detalle.cantidad;
            precioBruto = detalle.precioUnitario;
            tipo = TipoVendible.Producto;
            this.IGV = this.precioBruto * Convert.ToDecimal(_IGV);
            this.servicios = this.precioBruto * Convert.ToDecimal(_servicios);
        }

        public void ConvertFromDetalleCombos(DetallesVentasCombos detalle, double _IGV, double _servicios)
        {
            vendibleID = detalle.comboID;
            nombre = detalle.Combos.nombre;
            cantidad = detalle.cantidad;
            precioBruto = detalle.precioUnitario;
            tipo = TipoVendible.Combo;
            this.IGV = this.precioBruto * Convert.ToDecimal(_IGV);
            this.servicios = this.precioBruto * Convert.ToDecimal(_servicios);
        }
    }
}
